package com.bjpowernode.ba02;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.Date;

@Aspect
@Component("aspect")
public class MyAspect01 {
    /*
     * 后置通知定义方法，方法是实现切面功能的
     * 方法定义的要求：
     * 1.访问权限修饰符是public
     * 2.没有返回值
     * 3.方法名称自定义
     * 4.方法可有参数
     *      参数类型推荐使用Object，参数名随意
     *
     * */

    /*
 *   @AfterReturning:后置通知
 *       属性:1.value 值是切入点表达式
*            2.returning:自定义的变量，用于表示目标方法的返回值
                【自定义的变量名必须和通知方法的形参名一致】
 *
*   特点:
*       1.在目标方法执行后才执行
*       2.能够获取目标方法的返回值，可以根据这个返回值做不同的处理功能
*       3.可以修改这个返回值
*
     */
@AfterReturning(value = "execution(* com.bjpowernode.ba02.SomeServiceImpl.doOther(..))"
            ,returning = "res")
 public void myAfterReturning(Object res){
//Object res是目标方法执行后的返回值，
    System.out.println("后置通知:目标方法执行后的返回值是："+res);
    System.out.println(new Date());
    //修改目标方法的返回值
        if(res!=null){
            res="都篮子";
        }
    }
}
